package org.maxkey.portal.core.cam;


import java.io.Serializable;

/**
 * Api响应结果信息
 **/
@SuppressWarnings("serial")
public class PageResultData<T> implements Serializable {

	private static final long serialVersionUID = 9142315231410107803L;
	/**
	 * 成功状态
	 * @ignore
	 */
	private static final Integer SUCCESS = 200;
	/**
	 * 成功状态
	 * @ignore
	 */
	private static final String MSG_SUCCESS = "成功";
	/**
	 * 失败状态码
	 * @ignore
	 */
	private static final Integer FAIL = -1;
	/**
	 * 失败状态码
	 * @ignore
	 */
	private static final String MSG_FAIL = "失败";
	/**
	 * 业务错误码
	 */
	private Integer code;
	/**
	 * 描述
	 */
	private String msg;
	/**
	 * 结果集
	 */
	private T data;

	/**
	 * 总数
	 */
	private Integer totalCount;


	/**
	 * 默认处理时，自定义业务编码消息和业务数据
	 * @param code 错误编码
	 * @param msg  提示消息
	 */
	public PageResultData(int code,Integer totalCount,String msg,T data) {
		this.setCode(code);
		this.setMsg(msg);
		this.setData(data);
		this.setTotalCount(totalCount);
	}

	/**
	 * 返回默认错误. 有业务数据
	 * @param msg 错误消息(业务错误)
	 * @return 错误结果
	 */
	public static PageResultData<String> error(String msg) {
		return new PageResultData<>(FAIL,0, msg,null);
	}

	/**
	 * 返回自定义成功
	 * @param totalCount 总数
	 * @param data 实体
	 * @return 正确结果
	 */
	public static <T> PageResultData<T> ok(Integer totalCount,T data) {
		return new PageResultData<>(SUCCESS,totalCount,"成功1",data);
	}


	/**
	 * 获取结果编码
	 * @return 结果编码
	 * @author zengxueqi
	 */
	public Integer getCode() {
		return code;
	}
	/**
	 * 设置结果编码
	 * @param code 结果编码
	 * @return
	 * @author missye
	 */
	public PageResultData<T> setCode(Integer code) {
		this.code = code;
		return this;
	}
	/**
	 * 获取消息提示
	 * @return 消息提示
	 * @author missye
	 */
	public String getMsg() {
		return msg;
	}
	/**
	 * 设置消息提示
	 * @param msg 消息提示
	 * @return 对象
	 * @author missye
	 */
	public PageResultData<T> setMsg(String msg) {
		this.msg = msg;
		return this;
	}
	/**
	 * 获取业务数据
	 * @return 业务数据
	 * @author zengxueqi
	 */
	public T getData() {
		return data;
	}
	/**
	 * 设置业务数据
	 * @param data 业务数据
	 * @return 结果数据
	 * @author missye
	 */
	public PageResultData<T> setData(T data) {
		this.data = data;
		return this;
	}


	/**
	 * 设置业务数据
	 * @param totalCount 业务数据梳理
	 * @return 结果数据
	 * @author missye
	 */
	public PageResultData<T> setTotalCount(Integer totalCount) {
		this.totalCount = totalCount;
		return this;
	}

	public Integer getTotalCount() {
		return totalCount;
	}

}